Mobile processor-based systems such as laptop computers and handheld computers, and other processor-based devices such as mobile phones and game consoles, can offer improved power performance using a processor speed governor or processor frequency governor. In a typical situation, a processor such as an Intel Pentium® M processor with Intel SpeedStep® technology has a frequency governor that may be controlled by an operating system. In one mode of operation, an automatic configuration of the frequency governor raises or lowers the clock frequency at which the processor operates based on a recently sampled level of utilization of the processor. Typically, the governor analyzes processor utilization at regular intervals, such as 250 ms, dropping the frequency in response to high-idle periods, and raising it in response to high-utilization periods, as depicted in FIG. 1. In FIG. 1, a graph of processor utilization when a program is executed on an ungoverned system is shown at 140. Superimposed on the graph is a typical response of a frequency governor to the execution of the program on a governed system, 120. As may be seen from the figure, this method provides a coarse relationship between processor frequency and the capacity required by the programs executing on the system. Because the frequency governor lags the actual behavior of the program and because the changes in frequency therefore only occur at relatively large intervals, the actual frequency may lag the required capacity significantly. As the figure illustrates, a quick increase in utilization may only be met with a corresponding increase in frequency after a substantial interval has already elapsed and the processor needs of the program have started to fall, 160. Alternatively, the processor frequency may stay high, unnecessarily draining power, long after the need for high processor capacity has already fallen off, 180.
In order to improve battery life, it is generally considered advantageous for a frequency governor to lower processor frequency to the minimal available frequency level that exceeds the frequency required to prevent processor saturation. In an ideal scenario, this would be possible if the future processor utilization of the system were known. However, in general, for an arbitrary program executing on a processor-based system, predicting the expected utilization of the processor for the execution of the program is difficult or infeasible, because the past performance of an application is not always a good indicator future demand. This may happen, at least in part, because processor utilization depends on the inputs to an executing program and for many executing programs, the future values of input data are unpredictable.